package com.itheima.service;


import com.itheima.common.R;
import com.itheima.mapper.CategoryMapper;
import com.itheima.mapper.SetmealDishMapper;
import com.itheima.mapper.SetmealMapper;
import com.itheima.pojo.*;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author wuyiqiang
 * @2022/6/14 16:03
 */
@Service
public class SetmealService {
    @Autowired
    private SetmealMapper setmealMapper;
    @Autowired
    private SetmealDishMapper setmealDishMapper;
    @Autowired
    private CategoryMapper categoryMapper;

    /**
     * 通过id查菜品中的分类id
     *
     * @param id
     * @return
     */
    public Setmeal selectByCid(String id) {
        return setmealMapper.selectByCid(id);
    }


    /**
     * 新增套餐菜品
     * @param setmealDto
     */
    public void save(SetmealDto setmealDto) {
        String id = System.currentTimeMillis() + "";
        setmealDto.setId(id);
        //获取当前时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
        sdf.applyPattern("yyyy-MM-dd HH:mm:ss a");
        Date date = new Date();
        setmealDto.setCreateTime(date);
        setmealDto.setUpdateTime(date);
        //状态
        setmealDto.setStatus(1);
        //默认排序
        setmealDto.setSort(0);
        //添加信息到套餐中
        setmealMapper.save(setmealDto);
        // 取出菜品的信息，并且给每一个菜品对象补全信息
        List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();

        System.out.println(setmealDishes+"========================debug");
        //回顾stream流  map就是底层hi帮你遍历元素，遍历出来的每一个元素都交给你，你进行加工处理。 返回出去的元素会交给收集器collect,  返回一个集合
        //这个集合存储了加工后的元素
        List<SetmealDish> smdList = setmealDishes.stream().map(setmealDish -> {
            setmealDish.setId(setmealDto.getId());
            setmealDish.setSetmealId(setmealDto.getId());
            setmealDish.setCreateTime(date);
            setmealDish.setUpdateTime(date);
            setmealDish.setCreateUser(setmealDto.getCreateUser());
            setmealDish.setUpdateUser(setmealDto.getUpdateUser());
            setmealDish.setSort(0);
            return setmealDish;
        }).collect(Collectors.toList());
        System.out.println(smdList+"=======================debug1");
        //4. 批量插入套餐菜品表
            setmealDishMapper.batchSave(smdList);
    }


    /**
     * 分页查询
     * @param page
     * @param pageSize
     * @param name
     * @return
     */
    public R<Page> findByPage(Integer page, Integer pageSize, String name){
        page =(page-1)*pageSize;
        //根据名字寻找套餐列表
       List<Setmeal> setmealList= setmealMapper.findByName(name,page,pageSize);

       Page page1 = new Page();
        //把setmeal转化为setmealDto
       List<SetmealDto> setmealDtoList =null;
       try{
           setmealDtoList= setmealList.stream().map(setmeal -> {
               SetmealDto setmealDto=new SetmealDto();
               BeanUtils.copyProperties(setmeal, setmealDto);
               //根据类别的id查找类别
               //设置类别的名字
               Category category = categoryMapper.selectById(setmeal.getCategoryId());
               setmealDto.setCategoryName(category.getName());
               return setmealDto;
           }).collect(Collectors.toList());
       }catch(Exception e){
           System.out.println("套餐分页查询=================debug");
        }

        //设置返回页的总条数
        page1.setTotal(setmealMapper.selectAll());
        //设置返回页的每页数量
        page1.setSize(pageSize);
        if (setmealDtoList != null) {
            //设置返回页返回类对象的当前页
            page1.setCurrent(page);
            //将获得到的数据写进返回类中
            page1.setRecords(setmealDtoList);
            return R.success(page1);
        } else {
            return R.error("没有数据了");
        }
    }


    /**
     * 删除
     * @param ids
     */
    public void delete(List<String> ids){
        for (String id : ids) {
            setmealMapper.delete(id);
        }
    }

    /**
     * 根据id查询菜品信息和口味
     *
     * @param id
     * @return
     */
    public SetmealDto selectById(String id) {
        //查询套餐的基本信息
        Setmeal setmeal = setmealMapper.selectById(id);

        SetmealDto setmealDto = new SetmealDto();
        BeanUtils.copyProperties(setmeal, setmealDto);
        //查询当前套餐对应的菜品信息
        List<SetmealDish> setmealdishes = setmealDishMapper.selectByDishId(setmealDto.getId());
        setmealDto.setSetmealDishes(setmealdishes);
        return setmealDto;
    }


    /**
     * 修改菜品
     * @param setmealDto
     */
    public void update(SetmealDto setmealDto){
        //修改时间
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern("yyyy-MM-dd HH:ss a");
        Date date = new Date();
        setmealDto.setUpdateTime(date);
        //修改套餐
        setmealMapper.updateById(setmealDto);
        //删除该套餐的所有菜品信息
        setmealDishMapper.deleteBySetmealId(setmealDto.getId());
        //补全全部的菜品信息，然后重新写入
        List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
        List<SetmealDish> setmealDishList= setmealDishes.stream().map((setmealDish -> {
            String  timeMillis = System.currentTimeMillis()+"";
            //对每个元素进行加工
            setmealDish.setId(timeMillis);
            setmealDish.setSetmealId(setmealDto.getId());
            setmealDish.setCreateTime(date);
            setmealDish.setUpdateTime(date);
            setmealDish.setCreateUser(setmealDto.getCreateUser());
            setmealDish.setUpdateUser(setmealDto.getUpdateUser());
            return setmealDish;
        })).collect(Collectors.toList());

        System.out.println(setmealDishList+"============debug");
        //批量保存菜品
        setmealDishMapper.batchSave(setmealDishList);
    }



    /**
     * 修改状态
     *
     * @param status
     * @param ids
     */
    public void status(Integer status, List<String> ids) {
        for (String id : ids) {
            setmealMapper.updateStatus(id, status);
        }
    }

}
